//
// Created by pengtg on 2020/2/22.
//

#include "XThread.h"
#include "XLog.h"
#include <thread>
//不要把using命名空间放在头文件当中，因为你不知道头文件会被谁引用，别人加了头文件后有可能会造成冲突
using namespace std;

void XSleep(int mis)
{
    chrono::milliseconds du(mis);
    this_thread::sleep_for(du);
}

void XThread::SetPause(bool isP)
{
    isPause = isP;
    //等待100毫秒
    for(int i = 0; i < 10; i++)
    {
        if(isPausing == isP)
        {
            break;
        }
        XSleep(10);
    }
}

//启动线程
bool XThread::start()
{
    isExit = false;
    isPause = false;
    thread th(&XThread::ThreadMain,this);
    //当前线程放弃对新创建线程的控制,否则当对象被清空的时候，相关的资源可能会导致线程出错。
    th.detach();
    return true;
}

void XThread::ThreadMain()
{
    isRuning = true;
    XLOGI("线程函数进入");
    Main();
    XLOGI("线程函数退出");
    isRuning = false;

}

//通过控制isExit安全停止线程（不一定成功）
void XThread::stop()
{
    isExit = true;
    for(int i = 0; i < 200; i++)
    {
        if(!isRuning)
        {
            XLOGI("Stop 停止线程成功!");
            return;
        }
        XSleep(1);
    }
    XLOGI("Stop 停止线程超时!");
}